第一次參加鐵人賽,本身研究自然人憑證也一段時間,算是小有了解,打算利用此機會整理一下資料,分享給大家。內容會包含自然人憑證原理、程式範例、資安等。
在政府單位工作三年了,其中也接觸了不少系統,許多對民眾的網站也都支援了自然人憑證驗證,可以用於報稅、填表單、註冊等功能,對於如何開發介接自然人憑證也研究的有點心得,接下來就會花幾篇來介紹關於自然人憑證使用的知識。
談自然人憑證前,我們先來談系統需求,政府有各種大大小小的網站,每個網站都會有自己的會員清單,需要另外建立帳號密碼,但對民眾來說要記住每個網站的帳號密碼是件很繁瑣的事情,而且安全性也較低。為了統一身分驗證的使用者體驗,只要網站能跟我的卡片驗證,卡片又代表我個人,那我就可以用卡片來登入網站。如下圖人事服務網可以透過自然人憑證、健保卡、行動自然人憑證等驗證機制。
圖:人事服務網 https://ecpa.dgpa.gov.tw/
過去,政府無法在網路上為人民服務,主要原因有二:一是網路上身份驗證困難,冒名行為可能造成損失;二是資料未加密傳輸存在風險。內政部於 2003 年推出自然人憑證,就是為了解決上述問題。
圖:自然人憑證
自然人憑證申請方式為,任何自然人都可以到戶政事務所申辦,包含外國人也可以,有效期限為5年,可展期3年,共計最長8年。
自然人憑證利用非對稱式加解密技術,提供身份驗證、數位簽章和資料加密三大功能,確保網路身份驗證、電子檔案完整性及資料機密性。自然人憑證應用於政府E化服務,如線上申辦戶籍登記、報稅、健保資料查詢和勞農保查詢等,降低個人資料外洩風險。
使用上,需要將自然人憑證插入電腦的讀卡機,並輸入卡片 PIN 碼進行操作。而新卡(卡號 TP07 開頭)可以透過 NFC 進行感應,行動自然人憑證註冊就有使用此功能,舊卡(卡號 TP03 開頭)則不支援。
自然人憑證內存了兩組個人的公私鑰,一組用於數位簽章,一組用於資料加密。且數位簽章的公私鑰無法用於資料加密,反之亦然。接下來簡單介紹兩者的差別。
數位簽章用於電子文件上的簽名,確保檔案的完整性和不可否認性,是為了確認資料在傳遞的過程中不被竄改。
原理如上圖所示,我們將資料透過自然人憑證卡的私鑰進行加密,會產生一組密文,此動作稱為簽章。要驗證簽章則要將密文透過公鑰進行解密,並與原資料比對是否相同。
資料加密則是為了確保資料內容只有透過自然人憑證解密才能讀取,方法為將資料透過自然人憑證卡的公鑰進行加密,需要讀取內容,需要透過自然人憑證卡的私鑰進行解密才能查看。
身分驗證的原理是透過數位簽章來完成的,通常網站會先有個註冊流程,註冊的時候會將數位簽章的公鑰綁定到帳號上,並儲存在伺服器上。當使用者鑰進行登入驗證的時候,會從網站後端產生一組待簽章值,給前端進行數位簽章產生簽章值,再將簽章值丟回到後端伺服器。當伺服器透過公鑰將簽章值解開與原文相同時,就代表是使用同一組公私鑰進行簽章,則驗證通過。